Summary

Row

Countries

143

Confirmed

156102

Active Cases

77659 (49.7%)

Recovered

72624 (46.5%)

Deaths

5819 (3.7%)

Row

Top 25 Countries with Confirmed Cases

Row

Daily Cumulative Cases by Type

Active, Recovery, & Death Rates by Country (minimum 50 confirmed cases)

US Overview

Row

States

53

Confirmed

2727

Active

2661 (97.6%)

Recovered

12 (0.4%)

Deaths

54 (2%)

Row

Top 10 US States

Row

Daily Cumulative Cases by Type

Active, Recovery, & Death Rates by State

Snapshots

Row

Top 10 Countries with New Confirmed Cases

Daily New Cases (China, US, Italy, Germany, UK)

Maps

Row

World Map

US Map - Overview

About

My first Flex Dashboard

---
title: "COVID-19"
output: 
  flexdashboard::flex_dashboard:
    orientation: rows
    vertical_layout: scroll
    source_code: embed
---

```{r setup, include=FALSE}
# Load libraries
library(flexdashboard)
library(covidvirus)
library(tidyverse)
library(plotly)
library(DT)

# Acquire Data
virus <- covidvirus::get_cases(wide=T)

# define colors
clr_active = 'orange'
clr_confirmed = 'blue'
clr_dead = 'darkred'
clr_recovered = 'forestgreen'
clr_total = 'blue'
clr_states = 'purple'

# replace NAs with zeros
virus <- virus %>%
  mutate(
    confirmed = ifelse(is.na(confirmed), 0, confirmed),
    death = ifelse(is.na(death), 0, death),
    recovered = ifelse(is.na(recovered), 0, recovered),
    active = confirmed - death - recovered,
    country= case_when(
      country_region == 'United Arab Emirates' ~ 'UAE',
      country_region == 'United States' ~ 'USA',
      country_region == 'North Macedonia' ~ 'N. Macedonia',
      TRUE ~ country_region
    )
  )

# data summaries - country

country_totals <- virus %>%
  group_by(country) %>%
  summarize(
    confirmed = sum(confirmed),
    death = sum(death),
    recovered = sum(recovered),
    active = sum(active)
  ) %>%
  ungroup %>%
  arrange(desc(confirmed)) %>%
  mutate(country = factor(country, levels = country))

daily_totals <- virus %>%
  pivot_longer(
    cols = confirmed:active,
    names_to = 'type',
    values_to = 'cases'
  ) %>%
  group_by(date, type) %>%
  summarize(
    cases = sum(cases)
  ) %>%
  ungroup()


# data summaries - US

usdf <- virus %>%
  filter(country == 'USA') %>%
  select(-province_state, -city_county, -continent, -lat, -long, -country) %>%
  filter(!state %in% c('Diamond Princess', 'Grand Princess'))


us_totals <- usdf %>%
  group_by(state, state_name) %>%
  summarize(
    confirmed = sum(confirmed),
    death = sum(death),
    recovered = sum(recovered),
    active = sum(active)
  ) %>%
  ungroup %>%
  arrange(desc(confirmed)) %>%
  mutate(state = factor(state, levels = state))

us_daily <- usdf %>%
  pivot_longer(
    cols = confirmed:active,
    names_to = 'type',
    values_to = 'cases'
  ) %>%
  group_by(date, type) %>%
  summarize(
    cases = sum(cases)
  ) %>%
  ungroup()

```

Summary
=======================


Row
-----------------------------------------------------------------------
### Countries
```{r}
valueBox(length(unique(country_totals$country)), color = clr_states)
```


### Confirmed
```{r}
total_confirmed = sum(country_totals$confirmed)
valueBox(total_confirmed, icon = 'fa-user-md', color = clr_total)
```



### Active Cases
```{r}
active_cases = sum(country_totals$active)
pct_active = round((active_cases / total_confirmed) * 100,1)
valueBox(paste0(active_cases," (",pct_active,"%)"), icon = 'fa-hospital', color = clr_active)
```

### Recovered
```{r}
total_recovered = sum(country_totals$recovered)
pct_recovered = round((total_recovered / total_confirmed) * 100,1)
valueBox(paste0(total_recovered," (",pct_recovered,"%)"), icon = 'fa-walking', color = clr_recovered)
```

### Deaths
```{r}
total_deaths = sum(country_totals$death)
pct_dead = round((total_deaths / total_confirmed) * 100, 1)
valueBox(paste0(total_deaths," (", pct_dead, "%)"), icon = 'fa-dizzy', color = clr_dead)
```



Row
-----------------------------------------------------------------------

```{r, echo=FALSE}

```


### Top 25 Countries with Confirmed Cases

```{r}
top25 <- country_totals %>%
  arrange(desc(confirmed)) %>%
  head(25)

plot_ly(data = top25,x = ~country, y = ~active, type = 'bar', name = 'Active', marker = list(color = clr_active)) %>%
  add_trace(y = ~recovered, name = 'Recovered', marker = list(color = clr_recovered)) %>%
  add_trace(y = ~death, name = 'Dead', marker = list(color = clr_dead)) %>%
  layout(barmode = 'stack', yaxis = list(title = 'Total Cases (log scale)', type = 'log'))
```

Row
-----------------------------------------------------------------------

### Daily Cumulative Cases by Type

```{r}
dailies <- daily_totals %>%
  pivot_wider(
    names_from = type,
    values_from = cases,
    values_fill = list(cases = 0)
  ) %>%
  arrange(date) %>%
  mutate(
    total_active = cumsum(active),
    total_confirmed = cumsum(confirmed),
    total_dead = cumsum(death),
    total_recovered = cumsum(recovered)
  ) %>%
  select(-active, -confirmed, -death, -recovered)

plot_ly(data = dailies, x = ~date, y = ~total_active, name='Active', type = 'scatter', mode = 'lines+markers', line = list(color = clr_active), marker = list(color = clr_active)) %>%
  add_trace(y = ~total_dead, name = 'Dead', type = 'scatter', mode = 'lines+markers', line = list(color = clr_dead), marker = list(color = clr_dead)) %>%
  add_trace(y = ~total_recovered, name = 'Recovered', type = 'scatter', mode = 'lines+markers', line = list(color= clr_recovered), marker = list(color=clr_recovered)) %>%
  layout(yaxis = list(title = 'Cumulative Total Cases (log scale)', type = 'log'))
```

### Active, Recovery, & Death Rates by Country (minimum 50 confirmed cases)


```{r}

country_rates <- country_totals %>%
  mutate(
    active_pct = round((active / confirmed)*100,1),
    dead_pct = round((death / confirmed) * 100, 1),
    recover_pct = round((recovered / confirmed) * 100, 1)
  ) %>%
  arrange(desc(confirmed)) %>%
  select(country = country, confirmed, active_pct, dead_pct, recover_pct) %>%
  filter(confirmed >= 50)

datatable(country_rates, 
          rownames = F, 
          colnames = c("Country", "Confirmed", "Active Rate", "Death Rate", "Recovery Rate"),
          options = list(dom = 'tip')
          )
```


US Overview
=============================
Row
--------------
### States
```{r}
state_count = usdf %>% filter(confirmed > 0 & !state %in% c('Diamond Princess','Grand Princess')) %>% select(state) %>% distinct() %>% count()
valueBox(value = state_count, color = clr_states)
```


### Confirmed

```{r}
us_confirmed = sum(usdf$confirmed)
valueBox(us_confirmed, icon = 'fa-user-md', color = clr_total)
```


### Active

```{r}
us_active_cases = sum(usdf$active)
us_pct_active = round((us_active_cases / us_confirmed) * 100,1)
valueBox(paste0(us_active_cases," (",us_pct_active,"%)"), icon = 'fa-hospital', color = clr_active)
```


### Recovered

```{r}
us_recovered = sum(usdf$recovered)
us_pct_recovered = round((us_recovered / us_confirmed) * 100,1)
valueBox(paste0(us_recovered," (",us_pct_recovered,"%)"), icon = 'fa-walking', color = clr_recovered)
```


### Deaths

```{r}
us_deaths = sum(usdf$death)
us_pct_dead = round((us_deaths / us_confirmed) * 100, 1)
valueBox(paste0(us_deaths," (", us_pct_dead, "%)"), icon = 'fa-dizzy', color = clr_dead)
```


Row
---------------

### Top 10 US States

```{r}
top25_states <- us_totals %>%
  arrange(desc(confirmed)) %>%
  head(25)

plot_ly(data = top25_states,x = ~state, y = ~active, type = 'bar', name = 'Active', marker = list(color = clr_active)) %>%
  add_trace(y = ~recovered, name = 'Recovered', marker = list(color = clr_recovered)) %>%
  add_trace(y = ~death, name = 'Dead', marker = list(color = clr_dead)) %>%
  layout(barmode = 'stack', yaxis = list(title = 'Total Cases (log scale)', type = 'log'), xaxis = list(title = 'State'))
```

Row
-----------------------------------------------------------------------

### Daily Cumulative Cases by Type

```{r}
us_dailies <- us_daily %>%
  pivot_wider(
    names_from = type,
    values_from = cases,
    values_fill = list(cases = 0)
  ) %>%
  arrange(date) %>%
  mutate(
    total_active = cumsum(active),
    total_confirmed = cumsum(confirmed),
    total_dead = cumsum(death),
    total_recovered = cumsum(recovered)
  ) %>%
  select(-active, -confirmed, -death, -recovered)

plot_ly(data = us_dailies, x = ~date, y = ~total_active, name='Active', type = 'scatter', mode = 'lines+markers', line = list(color = clr_active), marker = list(color = clr_active)) %>%
  add_trace(y = ~total_dead, name = 'Dead', type = 'scatter', mode = 'lines+markers', line = list(color = clr_dead), marker = list(color = clr_dead)) %>%
  add_trace(y = ~total_recovered, name = 'Recovered', type = 'scatter', mode = 'lines+markers', line = list(color= clr_recovered), marker = list(color=clr_recovered)) %>%
  layout(yaxis = list(title = 'Cumulative Total Cases (log scale)', type = 'log'))
```


### Active, Recovery, & Death Rates by State


```{r}

state_rates <- us_totals %>%
  mutate(
    active_pct = round((active / confirmed)*100,1),
    dead_pct = round((death / confirmed) * 100, 1),
    recover_pct = round((recovered / confirmed) * 100, 1)
  ) %>%
  arrange(desc(confirmed)) %>%
  select(state, confirmed, active_pct, dead_pct, recover_pct) %>%
  filter(confirmed > 0)

datatable(state_rates, 
          rownames = F, 
          colnames = c("State", "Confirmed", "Active Rate", "Death Rate", "Recovery Rate"),
          options = list(dom = 'tip')
          )
```

Snapshots
============================

Row
-----------------------------

### Top 10 Countries with New Confirmed Cases

```{r}
current_date <- max(virus$date)

newest_confirmed_cases <- virus %>%
  filter(date == current_date) %>%
  select(date, country, confirmed) %>%
  group_by(date, country) %>%
  summarize(total_confirmed = sum(confirmed)) %>%
  arrange(desc(total_confirmed)) %>%
  mutate(country = factor(country, levels = unique(country))) %>%
  head(10)

plot_ly(data = newest_confirmed_cases, x = ~country, y = ~total_confirmed, type = 'bar', marker = list(color = clr_confirmed)) %>%
  layout(yaxis = list(title = 'Total Cases'), xaxis = list(title = 'Country'))
```


### Daily New Cases (China, US, Italy, Germany, UK)

```{r}

main_countries <- virus %>%
  filter(country %in% c('USA','Italy','Germany','United Kingdom')) %>%
  select(date, country, confirmed) %>%
  group_by(date, country) %>%
  summarize(
    total_confirmed = sum(confirmed)
  ) %>%
  ungroup() %>%
  pivot_wider(
    names_from = country,
    values_from = total_confirmed,
    values_fill = list(total_confirmed = 0)
  )

plot_ly(data = main_countries, x = ~date, y = ~Germany, type = 'scatter', name = 'Germany', mode = 'lines+markers', line = list(color= 'black'), marker = list(color='black')) %>%
  add_trace(y = ~USA, type = 'scatter', type = 'scatter', name = 'USA', mode = 'lines+markers', line = list(color= 'red'), marker = list(color='red')) %>%
  add_trace(y = ~Italy, type = 'scatter', type = 'scatter', name = 'Italy', mode = 'lines+markers', line = list(color= 'green'), marker = list(color='green')) %>%
  add_trace(y = ~`United Kingdom`, type = 'scatter', type = 'scatter', name = 'United Kingdom', mode = 'lines+markers', line = list(color= 'orange'), marker = list(color='orange')) %>%
  layout(yaxis = list(title = 'Total Cases (log scale)', type = 'log'))

```

Maps 
==================

Row
--------------------
### World Map

```{r}
# specify map projection/options
# g <- list(
#   showframe = FALSE,
#   showcoastlines = TRUE,
#   projection = list(type = 'Mercator')
# )

# plot_geo(country_totals) %>%
#   add_trace(
#     z = ~active, locations = ~country,
#     locationmode = 'country names',
#     color = 'oranges'
#   ) %>%
#   colorbar(title = 'Active Cases') %>%
#   layout(
#     title = 'Active Covid-19 Virus Cases Worldwide
(Hover for breakdown)', # geo = g # ) ``` ### US Map - Overview ```{r} us2 <- us_totals %>% mutate( hover = paste0(state_name, '
', 'confirmed cases: ', confirmed, '
', 'Deaths: ', death, '
', 'Recovered: ', recovered) ) fig <- plot_geo(us2, locationmode = 'USA-states') %>% add_trace( z = ~active, locations = ~state, text = ~hover, color = ~active, colors = 'Oranges' ) %>% layout( title = 'Active Covid-19 Virus Cases in the US
(Hover for breakdown)', geo = list( scope = 'usa', projection = list(type = 'albers usa'), showlakes = TRUE, lakecolor = toRGB('white') ) ) fig ``` About ============================== My first Flex Dashboard